package clasesGenerales;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class ListaCircular extends LinkedList {
	
	public Iterator iterator(){
		return new iteradorListaCircular(this);
	}
	
	private class iteradorListaCircular implements IteradorCircular{

		private List lista;
		private int posicionActual;
		private boolean nuevaVuelta;
		
		public iteradorListaCircular(List lista){
			this.lista = lista;
			posicionActual = 0;
			nuevaVuelta = false;
		}
		
		public boolean hasNext() {
			if(lista.isEmpty())
				return false;
			else
				return true;
		}

		public Object next() {
			posicionActual++;
			Object oAux = lista.get(posicionActual-1);
			if (posicionActual-1 == 0)
				nuevaVuelta = true;
			else
				nuevaVuelta = false;
			if(posicionActual == lista.size())
				posicionActual = 0;
			return oAux;
		}

		public void remove() {
			int posUltimo = lista.size()-1;
			if(posicionActual == 0)
				lista.remove(posUltimo);
			else
				if(posicionActual == posUltimo){
					lista.remove(posUltimo-1);
					posicionActual = posUltimo-1;
				}
				else
					lista.remove(posicionActual);
		}
		
		public boolean nuevaVuelta() {
			return nuevaVuelta;
		}
		
	}
}
